context
类族是一种很有用的模式,可以隐藏抽象基类背后的细节.OC的系统框架中,普遍使用这个模式.
一个例子: UIButton1
UIButton * button = [UIButton buttonWithType];
该方法返回的对象类型取决于传入的 type
,不同的type
决定了这个 button 将来的一些属性的不同(或者说可供设置的属性的不同)
要实现类似的功能,如果不用类族,那么还可能是一个类中的枚举.比如:
1 | - (void) drawRect:(CGRect)rect{ |
这是一个简单的类型,这么看来没有问题,但是如果类型太多,这样就显得非常笨拙了.
稍微聪明一点的程序员,会把这样的代码重构.不同的实现放到子类中,父类中存放公共代码.但是这样也有一个缺点,就是开发者需要知道所有的子类.
现在类族的好处就显而易见了.
一个自定义的类族
假设我们有一个 Person 类,Person 分为不同的职业.有老师,学生,医生.那么类族的实现应该是:
1 | typedef NS_ENUM(NSUInteger,PersonType) { |